2021a 第10回:Python 繰り返し
アナウンス
来週からみなさん対面授業だそうですよ
タイピングテストが成績評価基準に復活する可能性あり(審議中)
未合格の方は練習を怠らず!
あくまで任意摂取ですがご存知でなかった方のために貼っておきます
案の定のアクセス過多で0630まで予約がとれなかった…
課題提出状況に関して
極力課題を持ち帰らず、授業時間内に終わらせられるようにしましょう
プログラミングは「習うより慣れろ」「5分悩んだら聞け」です
情報基礎は照れずに質問できるかどうかだけC,Dで終わるかA,Sが取れるかが分かれるとも言える
前回課題の解説(応用編)
else, elifを上手く使って欲しい
意外と多かった回答
code:python
if bmi <= 18.5:
print('低体重')
if 18.5 <= bmi < 25.0:
print('標準')
if 25.0 <= bmi < 30.0:
print('太り気味')
if 30.0 <= bmi:
print('肥満')
より良い回答
code:python
if bmi < 18.5:
print('低体重')
elif 18.5 <= bmi < 25.0:
print('標準')
elif 25.0 <= bmi < 30.0:
print('太り気味')
elif 30.0 <= bmi:
print('肥満')
理想の回答
code:python
if bmi < 18.5:
print('低体重')
elif bmi < 25.0:
print('標準')
elif bmi < 30.0:
print('太り気味')
else:
print('肥満')
メリットは?
①コードのバグが生まれづらい
例えばうっかり1行目を if bmi <= 18.5 としてしまっていたら…
if文4つの場合…「低体重」「標準」両方出てしまう
elifを使えば一度でも条件式が成立したら後続処理を無視してくれるので救われる
②コンピュータの計算量が減る
if文4つの場合、bmiが15だったとしても4つ全てのif文が評価されてしまう
elifを使っていれば
③可読性があがる
理想の回答、コードが簡潔
簡潔ということは分かりやすいということ
簡潔ということは間違えにくいということ
インデントが大事という話
code:python
if number % 2==0:
print('2の倍数')
if number % 3==0:
print('6の倍数')
else:
if number % 3==0:
print('3の倍数')
if number %3!=0:
print('その他')
同じインデント(行頭の位置)の処理が同列として扱われてしまう
たとえば上記の「else」は「if numer %2 == 0」の中にあり、「if number %3 == 0」に対するelse になっている
ログイン名判定
文字列の表記ルールを抽象化して表現できるもの
e.g.
\w = アルファベット、数字、アンダーバーのいずれか1文字(半角)
\d = 何らかの数字1文字(半角)
\d{2} = 何らかの数字が2文字連続しているもの
[tsi] = t,s,i いずれかの1文字と一致するもの
(\w) = 取り出したい範囲を()で囲って指定している
code:python
import re # 正規表現を使うためのライブラリを読み込む
cns = "t09415is" # 佐橘の昔のログイン名
m = re.search(r'^(tsi)(\d{2})\d{3}\w{2}$', cns) # re.search という関数を使い
# ^(文字列の先頭)から検索を始め
# 最初の1文字がt,s,iのいずれかであり = 学部 ※()をつけて抽出対象に指定 # 直後に {2}桁の\d(数字)が続き = 入学年度 ※()をつけて抽出対象に指定
# 直後に{3}桁の\d(数字)が続き
# 直後に{2}文字の\w(文字)が続き = イニシャル
# $(末尾)を迎える文字列
# という条件に一致した部分を「cns」から探し出す
if m: # 何らかマッチしたものがあれば…
print('最初の()に一致した文字列', m1) print('2番目の()に一致した文字列', m2) else:
print('不正なログイン名')
講義
課題